// 继承:类与类之间的关系
// 继承后类与类之间的叫法
// A类继承了B这个类,那么此时A类叫子类,B类叫基类
// 子类 ---->派生类
// 基类 ----> 超类(父类)
// 一旦发生了继承关系,就出现了父子类的关系

;(() => {
  // 定义一个类
  class Person {
    name: string
    age: number
    gender: string
    constructor(name: string, age: number, gender: string) {
      this.name = name
      this.age = age
      this.gender = gender
    }
    sayHi() {
      console.log(this.name)
    }
  }
  // 定义一个类,继承自Person
  class Student extends Person {
    constructor(name: string, age: number, gender: string) {
      // 调用的是父类中的构造函数,使用的是super
      super(name, age, gender)
    }
    sayHi() {
      console.log('子类')
      super.sayHi()
    }
  }

  // 实例化Person
  const person = new Person('2', 2, '2')

  const stu = new Student('1', 1, '1')
  console.log(person, stu)
  stu.sayHi()

  // 总结:类和类之间如果要有继承关系,需要使用extends关键字
  // 子类中可以调用父类中的构造函数,使用的是super关键字(包括调用父类中的实例方法，也可以使用super)
  // 子类可以重写父类中的方法
})()
